package beanstao.util.store.dal.interfaces;

import java.util.List;

import beanstao.util.id.Id;
import beanstao.util.store.database.Where;
import beanstao.util.store.domainobject.DomainList;


/**
 * 数据的Delete功能接口。<br>
 * 比较轻松的办法是从 'beanstao.util.store.dal.AbstractDomainDbDal' 继承。
 * 
 * @author beanstao@google.com 
 * @version 3.0
 * @date 2010-08-11 17:26:03
 * 
 * @param <T> DomainObject
 * 
 */
public interface IDomainDelete<T>
{

	/**
	 * 将实体标记“已删除”
	 * 
	 * @return
	 */
	boolean delete(T domain);

	/**
	 * 将实体集合中所有的实体标记“已删除”,返回成功操作的记录数
	 * 
	 * @param domain 指定的实体集合
	 * @return 小于0，可能出现异常；等于0，没有符合条件的记录；大于0，成功操作的记录数。
	 */
	int delete(DomainList<T> domainList);

	/**
	 * 将指定的实体的记录标记“已删除”,返回成功操作的记录数
	 * 
	 * @param modifiorId 操作者的Id
	 * @param dId 指定的实体的Id
	 * @return 小于0，可能出现异常；等于0，没有符合条件的记录；大于0，成功操作的记录数。
	 */
	int delete(Id modifiorId, List<Id> dId);

	/**
	 * 将指定的实体的记录标记“已删除”,返回成功操作的记录数
	 * 
	 * @param modifiorId 操作者的Id
	 * @param dId 指定的实体的Id
	 * @return 小于0，可能出现异常；等于0，没有符合条件的记录；大于0，成功操作的记录数。
	 */
	int delete(Id modifiorId, Id dId);

	/**
	 * 将指定条件的记录标记“已删除”,返回成功操作的记录数
	 * 
	 * @param modifiorId 操作者的Id
	 * @param where 指定的条件
	 * @return 小于0，可能出现异常；等于0，没有符合条件的记录；大于0，成功操作的记录数。
	 */
	int delete(Id modifiorId, Where where);

	/**
	 * 将指定的条件键值的记录（单一条件删除）标记“已删除”,返回成功操作的记录数
	 * 
	 * @param key
	 * @param value
	 * @return 小于0，可能出现异常；等于0，没有符合条件的记录；大于0，成功操作的记录数。
	 */
	int delete(Id modifiorId, String key, Object value);

	/**
	 * 将本类型所在表(数据库)、节点(XML)的所有记录标记“已删除”,返回成功操作的记录数
	 * 
	 * @return 小于0，可能出现异常；等于0，没有符合条件的记录；大于0，成功操作的记录数。
	 */
	int deleteAll(Id modifiorId);
}
